class Labour < Charge
  
  has_many :labtofactures, :single_save => true, :dependent => :destroy
  has_many :factures, :through => :labtofactures

  has_many :labtoparcelles, :single_save => true, :dependent => :destroy
  has_many :parcelles, :through => :labtoparcelles

  belongs_to :category
  belongs_to :user
  
  validates_presence_of :name
  validates_presence_of :category
  validates_presence_of :user
  validates_associated :labtoparcelles
  validates_associated :labtofactures

# METHODES
  def get_cout_ha
    self.cout_ha_passage
  end

  # retourne le cout total de cette charge
  def get_cout_total
    return (self.sum_surfaces * self.get_cout_ha)
  end
  
  # retourne le cout ha par parcelle
  # cette méthode sera différenciée de get_cout_ha lorsque les indices 
  # de chaque parcelle seront introduits  
  def get_cout_ha_parcelle(parcelle)
    cout_ha_parcelle = 0
    if (all_parcelles? || self.parcelles.include?(parcelle))
      cout_ha_parcelle = self.get_cout_ha
    end
    return cout_ha_parcelle
  end
  
  def get_cout_ha_zone(zone)
    cout_ha_zone = 0
    if (all_parcelles? || self.include_zone?(zone))
      cout_ha_zone = self.get_cout_ha
    end
    return cout_ha_zone
  end
  
  def get_cout_ha_parcelle_with_rate(parcelle)
    cout_ha_parcelle = 0
    if all_parcelles? 
      cout_ha_parcelle = self.get_cout_ha
    end
    if (self.parcelles.include?(parcelle))
    rate = Labtoparcelle.find_by_parcelle(parcelle.id, self.id).rate
      cout_ha_parcelle = self.get_cout_ha * rate
    end
    return cout_ha_parcelle
  end
  
  
  
  
  
  
  
  

#debut Labtoparcelle
  def new_labtoparcelle_attributes=(labtoparcelle_attributes)
    labtoparcelle_attributes.each do |attributes|
      labtoparcelles.build(attributes)
    end
  end
 
  def existing_labtoparcelle_attributes=(labtoparcelle_attributes)
    labtoparcelles.reject(&:new_record?).each do |labtoparcelle|
      attributes = labtoparcelle_attributes[labtoparcelle.id.to_s]
      if attributes
        labtoparcelle.attributes = attributes
      else
#        labtoparcelle.delete(labtoparcelle)
        sql = "DELETE FROM labtoparcelles WHERE id = #{labtoparcelle.id} LIMIT 1"
        ActiveRecord::Base.connection.execute(sql)
      end
    end
  end
 
  def save_labtoparcelles
    labtoparcelles.each do |labtoparcelle|
      labtoparcelle.save(false)
    end
  end
  
#debut Labtofacture  
  def new_labtofacture_attributes=(labtofacture_attributes)
    labtofacture_attributes.each do |attributes|
      labtofactures.build(attributes)
    end
  end
 
  def existing_labtofacture_attributes=(labtofacture_attributes)
    labtofactures.reject(&:new_record?).each do |labtofacture|
      attributes = labtofacture_attributes[labtofacture.id.to_s]
      if attributes
        labtofacture.attributes = attributes
      else
#        labtofacture.delete(labtofacture)
        sql = "DELETE FROM labtofactures WHERE id = #{labtofacture.id} LIMIT 1"
        ActiveRecord::Base.connection.execute(sql)
      end
    end
  end
 
  def save_labtofactures
    labtofactures.each do |labtofacture|
      labtofacture.save(false)
    end
  end

end